/*
 * Nombre: Semestre.java
 * Version: 1.0.0
 * Diagrama: GAPI v2.3.1
 * Autor: Amado de Jesús Canté Cauich
 * Creado: 12-feb-2013
 * Modificado: 
 * Caso de uso: MGPE1, MGPE2, MGPE3, MGH1
 */
package Dominio;

import java.util.ArrayList;

/**
 * Clase que represnta un semestre en el sistema
 *
 * @author amado.cante
 */
public class Semestre {

    private int claveSemestre;
    private int numeroDeSemestre;
    private String nombre;
    private ArrayList<Asignatura> ListaDeAsignaturas;
    private int claveReticula;

    /**
     * Método constructor
     *
     * @param claveSemestre - La clave del semestre
     * @param numeroDeSemestre- El númer del semestre
     * @param nombre - El nombre del semestre
     * @param ListaDeAsignaturas - La lista de asignaturas del semestre
     */
    public Semestre(int claveSemestre, int numeroDeSemestre, String nombre, ArrayList<Asignatura> ListaDeAsignaturas) {
        this.claveSemestre = claveSemestre;
        this.numeroDeSemestre = numeroDeSemestre;
        this.nombre = nombre;
        this.ListaDeAsignaturas = ListaDeAsignaturas;
    }

    /**
     * Método constructor
     *
     * @param numeroDeSemestre - EL número del semestre
     */
    public Semestre(int numeroDeSemestre) {
        this.numeroDeSemestre = numeroDeSemestre;
        this.ListaDeAsignaturas = new ArrayList<Asignatura>();
    }

    /**
     * Método constructor
     *
     * @param numeroDeSemestre - El número del semestre
     * @param nombre - EL nombre del semestre
     */
    public Semestre(int numeroDeSemestre, String nombre) {
        this.numeroDeSemestre = numeroDeSemestre;
        this.nombre = nombre;
    }

    /**
     * Método constructor
     *
     * @param clave_semestre - La clave del semestre
     * @param numeroDeSemestre - El número del semestre
     * @param nombre - El nomrbe del semestre
     * @param ListaDeAsignaturas - La lista de asignaturas del semestre
     * @param claveReticula - La clave de la retícula del semestre
     */
    public Semestre(int clave_semestre, int numeroDeSemestre, String nombre, ArrayList<Asignatura> ListaDeAsignaturas, int claveReticula) {
        this.claveSemestre = clave_semestre;
        this.numeroDeSemestre = numeroDeSemestre;
        this.nombre = nombre;
        this.ListaDeAsignaturas = ListaDeAsignaturas;
        this.claveReticula = claveReticula;
    }

    /**
     * Método constructor
     *
     * @param ListaDeAsignaturas - La lista de asignaturas semestre
     * @param claveReticula - La clave de la retícula del semestre
     */
    public Semestre(ArrayList<Asignatura> ListaDeAsignaturas, int claveReticula) {
        this.ListaDeAsignaturas = ListaDeAsignaturas;
        this.claveReticula = claveReticula;
    }

    /**
     * Retorna la clave de la retícla del semestre
     *
     * @return la clave de la retícula del semestre
     */
    public int getClaveReticula() {
        return claveReticula;
    }

    /**
     * Asigna la clave de la retícula del semestre
     *
     * @param claveReticula - La clave de la retícula del semestre
     */
    public void setClaveReticula(int claveReticula) {
        this.claveReticula = claveReticula;
    }

    /**
     * Retorna la clave del semestre
     *
     * @return la clave del semestre
     */
    public int getClaveSemestre() {
        return claveSemestre;
    }

    /**
     * Asigna la clave del semestre
     *
     * @param claveSemestre - La clave del semestre
     */
    public void setClaveSemestre(int claveSemestre) {
        this.claveSemestre = claveSemestre;
    }

    /**
     * Retona el número de semestre
     *
     * @return el número de semestre
     */
    public int getNumeroDeSemestre() {
        return numeroDeSemestre;
    }

    /**
     * Asigna el núemro del semestre
     *
     * @param numeroDeSemestre - el número del semestre
     */
    public void setNumeroDeSemestre(int numeroDeSemestre) {
        this.numeroDeSemestre = numeroDeSemestre;
    }

    /**
     * Retorna el nombre del semestre
     *
     * @return el nombre del semestre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Asigna el nombre del semestre
     *
     * @param nombre - EL nombre del semestre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Retorna la lista de asignatuas del semestre
     *
     * @return la lista de asignatuas del semestre
     */
    public ArrayList<Asignatura> getListaDeAsignaturas() {
        return ListaDeAsignaturas;
    }

    /**
     * Asigna la lista de asignatuas del semestre
     *
     * @param ListaDeAsignaturas - La lista de asignatuas del semestre
     */
    public void setListaDeAsignaturas(ArrayList<Asignatura> ListaDeAsignaturas) {
        this.ListaDeAsignaturas = ListaDeAsignaturas;
    }

    /**
     * Agrega una asgnatura a la lista de asignatuas del semestre
     *
     * @param asignatura - La asignatua a gregar
     */
    public void agregarAsignatura(Asignatura asignatura) {
        if (this.ListaDeAsignaturas != null) {
            this.ListaDeAsignaturas.add(asignatura);
        } else {
            this.ListaDeAsignaturas = new ArrayList<Asignatura>();
            this.ListaDeAsignaturas.add(asignatura);
        }

    }

    /**
     * Elimina l asignauta de la lista de asignatuas del semestre
     *
     * @param asignatura - La asignatua a eliminar
     */
    public void eliminarAsignatura(Asignatura asignatura) {
        this.ListaDeAsignaturas.remove(asignatura);
    }

    /**
     * Elimina l asignauta de la lista de asignatuas del semestre
     *
     * @param nombre - El nombre de la asignatua a eliminar
     */
    public void eliminarAsignatura(String nombre) {
        int index = -1;
        for (int i = 0; i < this.ListaDeAsignaturas.size(); i++) {
            if (this.ListaDeAsignaturas.get(i).getNombre().equalsIgnoreCase(nombre)) {
                index = i;
            }
        }
        if (index > -1) {
            this.ListaDeAsignaturas.remove(index);
        }
    }

    /**
     * Imprime las asignatuas del semestre
     *
     * @return
     */
    @Override
    public String toString() {
        return this.ListaDeAsignaturas.toString();
    }
}
